﻿using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

namespace XinLife.Common.Filters
{
    //public class JwtAuthenticationMiddleware
    //{
    //    private readonly RequestDelegate _next;
    //    private readonly JwtAuthenticationOptions _options;

    //    public JwtAuthenticationMiddleware(RequestDelegate next, JwtAuthenticationOptions options)
    //    {
    //        _next = next;
    //        _options = options;
    //    }

    //    public async Task Invoke(HttpContext context)
    //    {
    //        var token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last();
    //        if (token != null)
    //        {
    //            var tokenHandler = new JwtSecurityTokenHandler();
    //            var key = Encoding.ASCII.GetBytes(_options.SecretKey);

    //            try
    //            {
    //                // 验证 JWT
    //                var claims = tokenHandler.ValidateToken(token, new TokenValidationParameters
    //                {
    //                    ValidateIssuerSigningKey = true,
    //                    IssuerSigningKey = new SymmetricSecurityKey(key),
    //                    ValidateIssuer = false,
    //                    ValidateAudience = false,
    //                    ClockSkew = TimeSpan.Zero
    //                }, out SecurityToken validatedToken);

    //                // 检查访问令牌是否过期
    //                if (IsAccessTokenExpired(validatedToken))
    //                {
    //                    // 申请新的访问令牌
    //                    var refreshToken = GetRefreshToken(validatedToken);
    //                    var newAccessToken = RequestNewAccessToken(refreshToken);

    //                    // 增加新的访问令牌过期时间
    //                    var newExpiration = DateTime.UtcNow.AddMinutes(30);
    //                    newAccessToken.Claims.Append(new Claim("exp", newExpiration.ToString(), ClaimValueTypes.Integer));

    //                    // 更新 JWT
    //                    var newTokenString = tokenHandler.WriteToken(newAccessToken);
    //                    context.Response.Headers.Add("Authorization", $"Bearer {newTokenString}");
    //                }
    //            }
    //            catch (Exception)
    //            {
    //                // JWT 验证失败，返回 401 Unauthorized
    //                context.Response.StatusCode = StatusCodes.Status401Unauthorized;
    //                return;
    //            }
    //        }

    //        await _next(context);
    //    }
    //}

}
